package logic

import (
	"context"
	"fmt"
	"wechat/models/mysql"

	"wechat/userrpc/internal/svc"
	"wechat/userrpc/userrpc"

	"github.com/zeromicro/go-zero/core/logx"
)

type AddFriendLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewAddFriendLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddFriendLogic {
	return &AddFriendLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

func (l *AddFriendLogic) AddFriend(in *userrpc.AddFriendRequest) (*userrpc.AddFriendResponse, error) {
	// todo: add your logic here and delete this line

	var user mysql.User

	mysql.DB.Where("id = ?", in.UserId).Find(&user)

	if user.ID == 0 {
		return nil, fmt.Errorf("当前用户不存在")
	}

	var findUser mysql.User

	mysql.DB.Debug().Where("wechat_name = ? or mobile = ?", in.Account, in.Account).Find(&findUser)

	if findUser.ID == 0 {
		return nil, fmt.Errorf("当前账号不存在，不允许添加")
	}

	if findUser.ID == user.ID {
		return nil, fmt.Errorf("不能添加自己")
	}

	var findFriend mysql.Friend
	//已经添加的好友不允许添加
	mysql.DB.Debug().Where("user_id = ?", in.UserId).Where("friend_id = ?", findUser.ID).Find(&findFriend)

	if findFriend.ID != 0 {
		return nil, fmt.Errorf("当前好友已被添加，不允许再添加")
	}

	//我们就不能直接添加了  生成一条申请记录

	//friend := mysql.Friend{
	//	UserId:   int64(user.ID),
	//	FriendId: int64(findUser.ID),
	//}
	//
	//err := mysql.DB.Debug().Create(&friend).Error
	//
	//if err != nil {
	//	return nil, fmt.Errorf("添加好友失败")
	//}

	record := mysql.ApplyRecord{
		UserId:   in.UserId,
		FriendId: int64(findUser.ID),
		Status:   0,
		Context:  in.Context,
	}
	err := mysql.DB.Debug().Create(&record).Error

	if err != nil {
		return nil, fmt.Errorf("申请添加好友失败")
	}
	return &userrpc.AddFriendResponse{Id: int64(record.ID)}, nil
}
